計算論的臨床心理学サマースクール2025
2025-08-07
大水拓海(おおみず たくみ)
専修大学大学院文学研究科心理学専攻修士課程2年
心理療法の作用機序,感情粒度,心理ネットワーク,
シミュレーション,能動的推論
なぜネットワークからシミュレーションを行うか?
実際の臨床データを使用することの困難さ(入手,使用)
侵襲性の問題を超えて介入を試す,予測する
新たな仮説の生成
ネットワークの結合を強めるパラメータ\(c\)の値が症状全体の活性化を左右する
\[A^{t}_{i} = \sum^{J}_{j=1} cW_{ij}X^{t-1}_j\tag{1}\]
\[P(X^{t}_{i} = 1) = \frac{1}{1+e^{b_{i}}-A^{t}_i} \tag{2}\]
Cramerのモデルでは症状のみの接続の強さに着目
→心理療法などの治療的な要素を入れて拡張することで,ネットワークの中でどの症状を標的にすれば大きな治療効果が得られるかシミュレーションできる
シミュレーションを実際に行ってみる
ネットワークシミュレーションを実行する関数を
パッケージにしてまとめました
ご自身のRコンソールに以下をコピペして,パッケージをインストールしてください
W_init:第1引数。症状ネットワークの重み。
b_init:第2引数。各ノードの活性化閾値。
target:どのノードを標的とするかを選択するリスト/ベクトル。介入するノードは1,介入しないノードは0にする。
上記は必須の引数です。
他にもいろいろオプションがあります。
パッケージのサンプルコード
# Example data for a 6-symptom network
set.seed(456)
weight_6 <- matrix(rnorm(6*6, mean = 0.2, sd = 0.08), nrow = 6, ncol = 6)
diag(weight_6) <- 0
weight_6[upper.tri(weight_6)] <- t(weight_6)[upper.tri(weight_6)]
threshold_6 <- data.frame(threshold = rnorm(6, mean = 0.3, sd = 0.05))
target_list_6 <- list(symptom1 = 1, symptom2 = 0, symptom3 = 1,
symptom4 = 0, symptom5 = 0, symptom6 = 1)
custom_symptom_names_6 <- c("Anxiety", "Sadness", "Fatigue",
"Insomnia", "Irritability", "Pain")サンプルコードの実行!
# Run the simulation with custom parameters
sim_results <- simulate_treatment_network(
W_init = weight_6,
b_init = threshold_6$threshold,
target = target_list_6,
connectivity = 1.2,
edge_between_TC = 0.8,
weight_bias = 1.2,
TB = 0.8,
trial = 5, # Example: Overriding default 10
baseline_iteration = 15, # Example: Overriding default 10
num_TC = 1, # Example: Overriding default 5
TC_iteration_per_component = 12, # Example: Overriding default 10
follow_up_iteration = 15, # Example: Overriding default 10
symptom_name = custom_symptom_names_6
)先ほど推定したIsing modelの重みと閾値を使って,シミュレーション
単独の症状を標的とした場合,どの症状への介入が最も効果的か?
複数の症状を標的とした場合,どのような組み合わせが効果的か?
症状を悪化させてしまう組み合わせはあるか?
その他,どんな条件だとどんなことが起きそうか?
不安のオープンデータをダウンロードしてカレントディレクトリに保存する。